/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package servicios;

import beans.AdmUsuario;
import beans.AdminEmail;
import beans.Usuario;
import java.awt.Image;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import org.apache.tomcat.util.http.fileupload.FileItem;
import org.apache.tomcat.util.http.fileupload.FileItemFactory;
import org.apache.tomcat.util.http.fileupload.FileUploadException;
import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;

/**
 *
 * @author Paredes
 */
public class ServletUsuario extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException 
    {
        String strTipo = request.getParameter("tipo");
        if(strTipo != null)
        {
            int tipo = Integer.parseInt(strTipo);
            switch (tipo) 
            {
                case 1:
                    actualizarUsuario(request, response);
                    //System.out.println("actualiza usuario");
                    break;
                case 2:
                    registrarUsuario(request,response);
                    //System.out.println("registra usuario");
                    break;
                case 3:obtenerDatos(request,response) ;

                    break;
                case 4:recuperarNombreUsuario(request.getParameter("correo"), request,response) ;
                    break;
                case 5:darDebaja(request,response);
                    break;
            }
        }        
        String idUsuario = request.getParameter("id");
        //String pass=request.getParameter("clave");
        if(idUsuario != null && idUsuario!="")
        {
            Usuario user = new AdmUsuario().getUsuario(idUsuario);
            if(user != null)
            {
                byte[] imagen = user.getImagen();

                if(imagen.length>0)
                {
                    response.setContentType("image/gif");
                    OutputStream o = response.getOutputStream();           
                    o.write(imagen);
                    o.flush();
                    o.close();
                }
            }
        }
    }
    
    private void recuperarNombreUsuario(String email, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        AdmUsuario admUsuario = new AdmUsuario();
        if(admUsuario.recuperarUserName(email)){
            request.getRequestDispatcher("usuarioRecuperado.jsp").forward(request,response);
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private void actualizarUsuario(HttpServletRequest request, HttpServletResponse response) 
            throws IOException, ServletException 
    {
        // int idUsuario = Integer.parseInt(request.getParameter("idUsuario"));
               
        Usuario usuario = getUsuarioImagen(request, response);
        
        if (new AdmUsuario().actulizarUsuario(usuario)) 
        {
            request.getSession().setAttribute("usuario",usuario);            
            request.getRequestDispatcher("recuperarUsuario.jsp").forward(request,response);
            System.out.println("Se guardo actualizar foto");
        }
        else 
        {
            System.out.println("no se actualizo usuario");
        }
    }
    
    private Usuario getUsuarioImagen(HttpServletRequest request, HttpServletResponse response){
        Usuario usuario = new Usuario();
        try { 
            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
            List items = null;
            try 
            {
                items = upload.parseRequest(request);
            } 
            catch (FileUploadException e) 
            {
                e.printStackTrace();
            }
            Iterator itr = items.iterator();
            while (itr.hasNext()) 
            {
                FileItem item = (FileItem) itr.next();
                if(!item.isFormField())
                {
                    InputStream imagen = item.getInputStream();        
                    int len;
                    int size = 1024;
                    byte[] buf;
                    if (imagen instanceof ByteArrayInputStream) 
                    {
                      size = imagen.available();
                      buf = new byte[size];
                      len = imagen.read(buf, 0, size);
                    } 
                    else 
                    {
                      ByteArrayOutputStream bos = new ByteArrayOutputStream();
                      buf = new byte[size];
                      while ((len = imagen.read(buf, 0, size)) != -1)
                        bos.write(buf, 0, len);
                      buf = bos.toByteArray();
                    }    
                    usuario.setImagen(buf);
                }
                else
                {
                    if( item.getFieldName().equals("nombre") )
                        usuario.setNombre(item.getString());
                    else if( item.getFieldName().equals("apellido"))
                        usuario.setApellido(item.getString());
                    else if( item.getFieldName().equals("username"))
                        usuario.setUsername(item.getString());
                    else if( item.getFieldName().equals("correo"))
                        usuario.setCorreo(item.getString());
                    else if( item.getFieldName().equals("paises"))
                        usuario.setPais(item.getString());
                    else if( item.getFieldName().equals("idUsuario"))
                        usuario.setId_usuario(Integer.parseInt(item.getString()));
                }
            }
                    
        } catch (Exception e) {
        }
        
        return usuario;
    }

    private void registrarUsuario(HttpServletRequest request, HttpServletResponse response) 
            throws IOException, ServletException {
           
             Usuario usuario=getUsuario(request, response);
             
        if (new AdmUsuario().registrarUsuario(usuario)) {
            usuario=new AdmUsuario().getUsuario(usuario.getUsername(),usuario.getClave());            
            HttpSession sesion=request.getSession();
            sesion.setAttribute("usuario",usuario);
            request.setAttribute("usuario",usuario);
            RequestDispatcher rd=request.getRequestDispatcher("recuperarUsuario.jsp");

            rd.forward(request, response);  
        } else {
            response.sendRedirect("registro.jsp");
        }
    }

    private Usuario getUsuario(HttpServletRequest request, HttpServletResponse response) {
        
        Usuario usuario = new Usuario();
        
        usuario.setNombre(request.getParameter("nombre"));
        usuario.setApellido(request.getParameter("apellido"));
        usuario.setUsername(request.getParameter("username"));
        usuario.setCorreo(request.getParameter("correo"));
        usuario.setPais(request.getParameter("paises"));
        usuario.setClave(request.getParameter("pass"));
        return usuario;
    }


    private void obtenerDatos(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
          Usuario user=new AdmUsuario().getUsuario(request.getParameter("username"),request.getParameter("passw"));

          if(user.getUsername()!=null && user.isHabilitado())
          {
              HttpSession sesion=request.getSession();
              sesion.setAttribute("usuario",user);              
              request.setAttribute("user",user);
              request.getRequestDispatcher("recuperarUsuario.jsp").forward(request,response);
              
          }
          else
          {
              System.out.println("ssssssssssss: "+user.isHabilitado()+" "+user.getComentario()+" "+user.getNombre()+" "+user.getId_usuario()+
                      " "+user.getApellido()+" "+user.getCorreo()+" " +user.getUsername());
              response.sendRedirect("index.jsp");
          }
              
          
    }

    private void darDebaja(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException 
    {
        Usuario usuario = getUsuarioImagen(request, response);
        String coment = request.getParameter("comentario");
        
        if (new AdmUsuario().bajaUsuario(Integer.parseInt(request.getParameter("idUsuario")),coment)) 
        {
            request.setAttribute("usuario",usuario);
            request.getRequestDispatcher("DarDeBaja.jsp").forward(request,response);
            
        }
        else 
        {
            //response.sendRedirect("index.jsp");
            System.out.println("no c           ddddddddddd");
        }
    }
}